<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 继承，子类可以拥有父类的所有属性和方法
        // 也可以重写父类的方法

        // 使用 extends 关键字来实现继承

        class Person {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            getName() {
                console.log(this.name);
            }
            static printInfo() {
                console.log("这是一个人类");
            }
        }

        // 使用 extends 关键字来实现继承
        class Students extends Person { }

        var s = new Students('emily', 18);
        s.getName();
        console.log(s.name);
        console.log(s.age);
        // static 静态方法也会被继承，但同样也只能是类调用，而不是实例
        Students.printInfo();
        // s.printInfo(); // 报错

        // 扩展父类的方法
        class Teacher extends Person {
            constructor(name, age, salary) {
                // 子类中必须调用 super 方法，重塑父类的属性，才能获得父类的属性
                super(name, age);
                this.salary = salary;
            }
            getSchool() {
                console.log("北京大学");
            }
            getSalary() {
                console.log(this.salary);
            }
        }
        
        var t = new Teacher('tom', 20, 100000);
        t.getSchool();
        t.getSalary();
    </script>
</body>

</html>